package net.huashitong.supervision.task.service;

import com.sirdc.modules.core.dao.BaseDao;
import com.sirdc.modules.sys.base.StringPKService;
import com.sirdc.modules.sys.service.SysTableService;
import com.sirdc.modules.utils.ObjectUtils;
import net.huashitong.supervision.task.dao.TaskSubDao;
import net.huashitong.supervision.task.dao.TaskUnitDao;
import net.huashitong.supervision.task.dao.TaskUserDao;
import net.huashitong.supervision.task.entity.TaskSub;
import net.huashitong.supervision.task.entity.TaskUnit;
import net.huashitong.supervision.task.entity.TaskUser;
import net.huashitong.supervision.task.filter.TaskUserFilter;
import net.huashitong.supervision.task.util.HolidayUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: ling
 * Date: 2019/8/6
 * Time: 18:17
 * To change this template use File | Settings | File Templates.
 * Description:
 */
@Service
public class TaskUserService extends StringPKService<TaskUser> {
    @Autowired
    private SysTableService tableService;
    @Autowired
    private TaskUserDao taskUserDao;
    @Autowired
    private TaskUnitService taskUnitService;

    @Override
    protected BaseDao<TaskUser, String> getDao() {
        return taskUserDao;
    }

    @Override
    protected void beforeSave(TaskUser obj) {
        obj.setSysId(tableService.updateMaxSysId("t_task_user", null));
    }
    public void save(TaskUser obj, String userId){
        Date date = new Date();
        String date1 = HolidayUtils.sdf1.format(date);
        String time = HolidayUtils.sdf2.format(date);
        obj.setSysId(tableService.updateMaxSysId("t_task_user",null));
        obj.setCreateUser(userId);
        obj.setUpdUser(userId);
        obj.setCreateDate(date1);
        obj.setCreateTime(time);
        obj.setUpdDate(date1);
        obj.setUpdTime(time);
        getDao().save(obj);
    }
    public List<TaskUser> getByTaskUnitId(String taskUnitId) {
        return taskUserDao.getByTaskUnitId(taskUnitId);
    }
    public List<TaskUser> getByTaskUnitIdDel(String taskUnitId) {
        return taskUserDao.getByTaskUnitIdDel(taskUnitId);
    }

    public String saveTaskUser(TaskUser taskUser) {
        taskUser.setSysId(tableService.updateMaxSysId("t_task_user", null));
        taskUserDao.save(taskUser);

        return "200";
    }

    public List<TaskUser> queryFilter(TaskUserFilter filter) {
        return taskUserDao.queryFilter(filter);
    }

    public List<TaskUser> getByCreateUserAndTaskUnitId(String userId, String taskUnitId) {
        return taskUserDao.getByCreateUserAndTaskUnitId(userId, taskUnitId);
    }

    public List<TaskUser> getByTaskUnitIdAndUnitUserId(String taskUnitId, String userId) {
        return taskUserDao.getByTaskUnitIdAndUnitUserId(taskUnitId, userId);
    }

    public void batchDeleteIds(List<String> ids) {
        //查询该主任务的所有单位任务
        List<String> taskUnitIds = new ArrayList<>();
        for (String id : ids) {
            List<TaskUnit> taskUnits = taskUnitService.getByMainId(id);
            if (ObjectUtils.isNotBlank(taskUnits)) {
                for (TaskUnit taskUnit : taskUnits) {
                    taskUnitIds.add(taskUnit.getSysId());
                }
                taskUserDao.deleteByUnitIds(taskUnitIds);
            }
        }
    }

    /**
     * 当前人员任务及批转下去的人员任务更新失效，生效
     * @param taskUserId
     * @return
     */
    public String updateTaskUser(String taskUserId) {
        TaskUser taskUser = this.getById(taskUserId);
        if (ObjectUtils.isBlank(taskUser)){
            return "500";
        }
        //查询当前人员任务的人员批转过的任务有哪些
        List<TaskUser> taskUserList = this.getByCreateUserAndTaskUnitId(taskUser.getUnitUserId(), taskUser.getTaskUnitId());
        //如果该任务的接收人有批转下去，将批转下去的人员任务也更新为失任务
        if (ObjectUtils.isNotBlank(taskUserList)) {
            for (TaskUser user : taskUserList) {
                user.setDel("0");
                this.update(user);
            }
        }
        taskUser.setDel("0"); //任务删除
        this.update(taskUser);
        return "200";
    }

    public List<TaskUser> queryStatistics(TaskUserFilter taskUserFilter) {
        return taskUserDao.queryStatistics(taskUserFilter);
    }
}
